Я хочу выполнить три независимых копии программы на C (c_prog.exe), которая читает из входного файла (input.dat) одновременно на трех ядрах обработки.Я не хочу, чтобы они что-то делились;особенно, входной файл.
Для этой цели я выделил один из двух четырехъядерных процессоров на своем компьютере с помощью Linux cset shield (Обратите внимание: каждый четырехъядерный процессор имеет свой собственный двухуровневый кэшиерархия. L2 распределяется между 4 ядрами, а L1 является частным. Межпроцессорное взаимодействие осуществляется через CCI).
Я заметил, что скрипт Python завершает выполнение значительно быстрее (я записал время до запуска потоков и послезавершение темы), чем три копии c_prog.exe на трех разных терминалах Linux.Значит ли это, что потоки Python все еще что-то делят?Если да, не могли бы вы указать, что наиболее вероятно разделяется между этими потоками?
В моем понимании, три потока Python, безусловно, не делят свои стеки, счетчики программ и регистры.Так как используется функция os.system (), три копии c_prog.exe должны выполняться на трех независимых субоболочках вне экранированных ядер.Однако, используя htop, я подтвердил, что подоболочки создаются внутри процессоров щита.Поэтому я не понимаю, что происходит.
#!/usr/bin/python
import threading
import os
semaphore = threading.Semaphore(3)
def run_command(cmd):
with semaphore:
os.system(cmd)
for i in range(3):
threading.Thread(target=run_command, args=("./c_prog.exe input.dat", )).start()