gpt4 book ai didi

java - 调用 Java/Scala 方法的最早方法是什么?

转载 作者:行者123 更新时间:2023-12-04 11:44:00 26 4
gpt4 key购买 nike

我使用一些脏代码在 Scala 中设置环境变量 second answer of this question
我在IDE(IDEA Intellij)中对此进行了测试并设置了OMP_NUM_THREADS在我的课开始时。

import org.scalatest.{FlatSpec, Matchers}
class MyTest extends FlatSpec with Matchers {
val m = Map("OMP_NUM_THREADS" -> "1")
EnvHacker.setEnv(m)
设置后,我可以从 System.env 读取, 有用。但是当我的程序运行时,它不使用这个。我尝试将它设置在静态块中,但仍然无法正常工作。
但是如果我在 IDE 运行配置中设置它(在 JVM 运行之前),它会按我的预期工作和运行。所以似乎它在我修改变量之前被读取。
或者换句话说,我有一段代码,什么是 最早在 Java/Scala 中调用它的方法。例如在 main 方法的第一行之前调用静态块。
更新了一些细节:
我正在使用 tensorflow-mkl Java API,它会读取系统环境变量 OMP_NUM_THREADS有时,根据我的测试结果,此操作是在系统静态块之前。但是,我想在代码中进行控制,因为我不知道没有代码逻辑的预期配置。

最佳答案

我认为这是一个 XY problem :您想通过“OMP_NUM_THREADS”环境控制 OpenMP,但由于某种原因您不能或不想在您的进程中设置实际环境变量?那正确吗?
你是如何调用 OpenMP 的? OpenMP 是一个 C 库 https://www.openmp.org/ ,因此它不会注意到您对 java.lang.ProcessEnvironment#theEnvironment 所做的任何更改字段,无论您设置它多早。
如果您通过 exec 调用 OpenMP调用,那么您应该能够向它传递一个新环境。
如果您通过 JNI 调用 OpenMP,那么您将无法从 Java 更改您的环境变量,您将需要在启动该过程时实际设置 env。见 Can I set an Environment Variable for Java Native Interface (JNI) libraries?
你能不能改用 omp_set_num_threads()而不是 OMP_NUM_THREADS环境?

关于java - 调用 Java/Scala 方法的最早方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67563499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com