我对启动带有--xla_dump_ir_to
标志的 TensorFlow 程序的 LLVM IR 感兴趣,特别是我想探索 XLA 如何处理并行化。
我有一个在具有 56 个 CPU 的机器上运行的测试程序,并且在结果.ll
文件中显示了一个并行化函数,正如预期的那样:
call void @__xla_cpu_runtime_ParallelForkJoin(i8* %6, i8* %run_options, i8** null, i8** %buffer_table, i64* %prof_counters, i32 56, i64* getelementptr inbounds ([224 x i64], [224 x i64]* @parallel_convolution_parallel_dimension_partitions, i32 0, i32 0), i32 2, i8* bitcast (void (i8*, i8*, i8**, i8**, i64*, i64*)* @parallel_convolution to i8*))
查看ParallelForkJoin
XLA 源代码中的函数有一个输入参数num_partitions
,这里设置为 56。
现在我想获得一个只使用一些可用 CPU 的类似结果,所以我在我的 python 程序中添加了以下几行(如 Tensorflow 指南https://www.tensorflow.org/guide/performance/overview中所建议的那样) #optimizing_for_cpu和这里的其他地方):
config = tf.ConfigProto()
config.intra_op_parallelism_threads = 5
config.inter_op_parallelism_threads = 5
tf.Session(config=config)
但是生成的.ll
文件是完全一样的!
这是为什么?我原以为指定不同数量的并行线程会导致参数为 5(在这种情况下)而不是 56。
更一般地说,是否有任何关于 XLA 如何提取并行性的文档?